package com.theaf.basemodule.common.api;

import com.theaf.basemodule.common.dto.organ.ContactDTO;
import com.theaf.basemodule.common.dto.organ.OrganDTO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author:songwenke
 * @Description:机构服务
 * @Date:create in 16:58 2018/1/29
 * @Modified By:
 **/
public interface OrganService {
    /**
     * 查询机构
     * @param name 名称
     * @param type 类型
     * @param creater 创建者
     * @param updater 修改者
     * @param areaId 地区
     * @param enabled 是否启用
     * @param start 开始时间
     * @param end 结束时间
     * @param pid 父ID
     * @param levelSize 层次
     * @param auths 数据权限
     * @param delete 是否删除类型
     * @param otherTerm 其它条件
     * @return
     */
    List<OrganDTO> findForTree(String name, String type, String creater, String updater,
                               Long areaId, Boolean enabled, Date start, Date end, Long pid,
                               int levelSize, String auths, Boolean delete, Map<String,Object> otherTerm);

    /**
     * 多条件排序查询
     * @param name 名称
     * @param parentId 父机构id
     * @param organType 机构类型
     * @return
     */
    List<OrganDTO> find(String name, Long parentId,String organType);
    /**
     * 多条件排序查询机构联系方式
     * @param name 名称
     * @param parentId 父机构id
     * @param organType 机构类型
     * @param contactCode 联系方式
     * @return
     */
    List<ContactDTO> findContact(String name, Long parentId, String organType, String contactCode);
    List<ContactDTO> findContact(Long id,String contactCode);

    /**
     * 对象查询
     * @param id
     * @return
     */
    Object findById(Long id);

    /**
     * 保存
     * @param vo 数据
     */
    Long save(Object vo) throws Exception;
    /**
     * 删除
     * @param id
     */
    void delete(Long id);

    /**
     * 打开或关闭机构
     * @param id
     */
    void openOrClose(Long id);

    /**
     * 批量移动
     * @param ids
     * @param parentId
     */
    void move(List<Long> ids,Long parentId);

    /**
     * 获取子机构ID
     * @param id
     * @return
     */
    List<Long> findChildAllId(Long id);
    /**
     * 获取所有子机构ID
     * @param id
     * @return
     */
    List<Long> findChildId(Long id);

    /**
     * 获取所有子机构ID
     * @param id
     * @return
     */
    List<OrganDTO> findAllChild(Long id);

    /**
     * 获取所有子机构联系方式
     * @param id
     * @return
     */
    List<ContactDTO> findAllChildContact(Long id,String contactCode);

    /**
     * 获取子机构
     * @param id
     * @return
     */
    List<OrganDTO> findChild(Long id);

    /**
     * 获取子机构联系方式
     * @param id
     * @return
     */
    List<ContactDTO> findChildContact(Long id,String contactCode);
}
